package Infix2RPM.processor.Stack;

import Infix2RPM.processor.Exception.LogicException;
import Infix2RPM.processor.infixElement.BooleanOperand;

public interface BasicOperand {

	public BasicOperand add(BasicOperand operand) throws LogicException;

	public BasicOperand subtract(BasicOperand operand) throws LogicException;

	public BasicOperand divide(BasicOperand operand) throws LogicException;

	public BasicOperand multiply(BasicOperand operand) throws LogicException;

	public BasicOperand power(BasicOperand operand) throws LogicException;

	public BasicOperand mod(BasicOperand operand) throws LogicException;

	public BasicOperand concat(BasicOperand operand) throws LogicException;
	
	public BooleanOperand equal(BasicOperand operand) throws LogicException;

	public BooleanOperand lessThan(BasicOperand operator) throws LogicException;

	public BooleanOperand greaterThanEqual(BasicOperand operator)
			throws LogicException;

	public BooleanOperand lessThanEqual(BasicOperand operator)
			throws LogicException;

	public BooleanOperand greaterThan(BasicOperand operator)
			throws LogicException;

	public BooleanOperand or(BasicOperand operator)
			throws LogicException;

	public BooleanOperand and(BasicOperand operator)
			throws LogicException;
	
	public boolean isNull();

	public boolean isEmpty();

	public Object getValue();

	public boolean isEqual(String token);

	public String getValueAsString();
}
